package com.ttbj.api.yitong;

import java.util.List;
import java.util.Map;

import com.ttbj.api.dto.Page;
import com.ttbj.api.dto.WithdrawData;
import com.ttbj.api.exception.BusinessException;


/**
 * 使用易通金服提现完成提现接口
 */
public interface WithdrawService {
	
	/**
	 * 使用易通金服提现完成提现及保存相关数据
	 * @param wdPassword 提现密码
	 * @param accountNo 账户号
	 * @param personNum 提现人的编号
	 * @param personName 提现人账号
	 * @param amount 交易金额：单位:元
	 * @return Map<String,String> 如：失败：{status:0,retInfo:提现金额大于可用余额}，成功：{status:1,retInfo:受理成功}
	 * @throws Exception
	 */
	public Map<String, String> withrawOperation(String wdPassword, String accountNo, 
													String amount, String personNum, String personName) throws Exception;
	
	/**
	 * 使用易通金服提现完成后的异步通知
	 * @param noticeStr
	 * @return Map<String,String> 
	 * 		       失败：{status:0,retInfo:验签失败}，{status:2,retInfo:提现成功，更新状态值失败}，成功：{status:1,retInfo:提现成功}
	 * @throws Exception
	 */
	public Map<String, String> withrawNotify(String noticeStr) throws Exception;
	
	/**
	 * 使用易通金服余额查询接口查询可用余额，挂账金额，冻结金额
	 * @param accountNo 账户号
	 * @return Map<String,String> 
	 * 	失败：{status:0,retInfo:没有账户号，不能余额查询},{status:0,retInfo:服务调用失败}
	 * 	成功：{status:1,retInfo:处理成功,balance:40.00,billAmt:0.00,frozenAmt:0.00}
	 * @throws Exception
	 */
	public Map<String, String> withrawBalance(String accountNo) throws Exception;
	
	/**
	 * 使用易通金服提现查询，查询提现的状态：00：成功，01：失败，02处理中，03：待请求，04：网络异常.
	 * 如果查询出来的状态跟前端传来的状态不同，则更新状态，否则，不更新.
	 * @param accountNo 账户号
	 * @param orderNo 提现订单号（分账系统订单号）
	 * @param status 前端传来的提现状态值
	 * @param Map<String,String> 
	 * 	失败：{status:0,retInfo:参数不能为空},{status:0,retInfo:服务调用失败}
	 * 	成功：{status:1,retInfo:处理成功,wdQueryStatus:00}，wdQueryStatus为查询来的提现状态
	 * @throws Exception
	 */
	public Map<String, String> withrawQuery(String accountNo, String orderNo, String status) throws Exception;
	
	/**
	 * 设置司机提现密码
	 * @param driverNum 司机编号
	 * @param driverName 司机用户名
	 * @param wdPassword 司机提现密码（6位纯数字密码）
	 * @throws Exception
	 */
	public void setUpDriverWdPassword(String driverNum, String driverName, String wdPassword) throws BusinessException;
	
	/**
	 * 修改司机提现密码
	 * @param driverNum 司机编号
	 * @param driverName 司机用户名 
	 * @param oldWdPassword 旧提现密码
	 * @param wdPassword 新提现密码（6位纯数字密码）
	 * @throws BusinessException
	 */
	public void modifyDriverWdPassword(String driverNum, String driverName, String oldWdPassword, String newWdPassword) throws BusinessException;
	
	/**
	 * 设置公司提现密码
	 * @param salesmanNum 企业管理员的编号
	 * @param salesmanName 企业管理员的账户名
	 * @param wdPassword 提现密码
	 * @throws BusinessException
	 */
	public void setUpComnumWdPassword(String comnumNum, String salesmanName, String wdPassword) throws BusinessException;
	
	/**
	 * 修改公司提现密码
	 * @param driverNum 司机编号
	 * @param driverName 司机用户名 
	 * @param oldWdPassword 旧提现密码
	 * @param wdPassword 新提现密码（6位纯数字密码）
	 * @throws BusinessException
	 */
	public void modifyComnumWdPassword(String comnumNum, String salesmanName, String oldWdPassword, String newWdPassword) throws BusinessException;
	
	/**
	 * 分页和查询条件查询提现信息
	 * @param wData 提现相关查询信息
	 * @param page 分页页码
	 * @return
	 * @throws BusinessException
	 */
	public List<WithdrawData> findWithdrawResultByPage(WithdrawData wData, Page page) throws BusinessException;
	
	/**
	 * 分页和查询条件查询提现信息数量
	 * @param wData 提现相关查询信息
	 * @return
	 * @throws BusinessException
	 */
	public Integer findWithdrawResultByPageCount(WithdrawData wData) throws BusinessException;
	
	/**
	 * 分页和查询条件查询提现日志 
	 * @param wData 提现日志查询信息
	 * @return
	 * @throws BusinessException
	 */
	public List<WithdrawData> findWithdrawLogByPage(WithdrawData wData, Page page) throws BusinessException;
	
	/**
	 * 分页和查询条件查询提现日志数量
	 * @param wData 提现日志查询信息
	 * @return
	 * @throws BusinessException
	 */
	public Integer findWithdrawLogByPageCount(WithdrawData wData) throws BusinessException;
	
}
